www.gusucode.com > 基于Visual C++高级界面特效制作百例源码程序 > 基于Visual C++高级界面特效制作百例源码程序/code/char03/demo_ui_explorer_prj/Src/explorer/mainfrm.cpp

    // MainFrm.cpp : implementation of the CMainFrame class
//
// 1998 Kirk Stowell ( kstowel@sprynet.com )
// www.geocities.com/SiliconValley/Haven/8230/index.html
//
// You are free to use, modify and distribute this source, as long as
// there is no charge, and this HEADER stays intact. This source is
// supplied "AS-IS", and without WARRANTY OF ANY KIND, and the user
// holds the author blameless for any or all problems that may arise
// from the use of this code.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "demo_ui_explorer.h"

#include "MainFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

////////////////////////////////////////////////////////////////
// CAnimate : implementation of the CAnimate class
//

IMPLEMENT_DYNAMIC(CAnimate, CAnimateCtrl)

BEGIN_MESSAGE_MAP(CAnimate, CAnimateCtrl)
	//{{AFX_MSG_MAP(CAnimate)
	ON_WM_CREATE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

int CAnimate::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CAnimateCtrl::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	Open( IDR_AVI ); // open the avi resource.
	Play( 0, -1,-1 );// play avi resource.
	
	return 0;
}

////////////////////////////////////////////////////////////////
// CCombo : implementation of the CCombo class
//

IMPLEMENT_DYNAMIC(CCombo, CComboBox)

BEGIN_MESSAGE_MAP(CCombo, CComboBox)
	//{{AFX_MSG_MAP(CCombo)
	ON_WM_CREATE()
	ON_CONTROL_REFLECT(CBN_DROPDOWN, OnDropDown)
	ON_CONTROL_REFLECT(CBN_SELENDOK, OnSelendok)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

//////////////////
// Note that I have to resize the window when I get CBN_DROPDOWN
//

void CCombo::OnDropDown()
{
	// use same width but taller height
	CRect rc;
	GetWindowRect(&rc);
	SetWindowPos(NULL,0,0,rc.Width(),200,SWP_NOMOVE|SWP_NOACTIVATE);
}

int CCombo::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CComboBox::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	CString m_csText("http://www.geocities.com/SiliconValley/Haven/8230/index.html");

	// Add items to control
	for( int i = 0; i < 5; i++ ) {
		AddString( m_csText );
	}

	SetCurSel(0);

	m_font.CreatePointFont( 80, _T("MS Sans Serif") );
	SetFont(&m_font);
	
	return 0;
}

void CCombo::OnSelendok() 
{
	CString cs; cs.Format("You selected item %d",GetCurSel());
	AfxMessageBox(cs);
}

////////////////////////////////////////////////////////////////
// CRebar : implementation of the CRebar class
//

// This is the virtual function you have to override to add bands
BOOL CRebar::OnCreateBands()
{
	// Load the background bitmap. Thanks to Christian Skovdal Andersen
	// for pointing this out!
	m_hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
		MAKEINTRESOURCE(IDB_BITMAP1),IMAGE_BITMAP,0,0,LR_LOADMAP3DCOLORS);
	ASSERT(m_hBmp);
	m_rbbi.hbmBack = m_hBmp;

	if( !CreateToolbarBand()) {
		return -1;
	}
	if( !CreateAviCtrlBand()) {
		return -1;
	}
	if( !CreateIE4TbarBand()) {
		return -1;
	}
	if( !CreateComboBxBand()) {
		return -1;
	}

	return 0; // OK
}

BOOL CRebar::CreateToolbarBand()
{
	// Create toolbar
	if (!m_wndToolBar.Create( this,WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|
		CBRS_TOOLTIPS|CBRS_SIZE_DYNAMIC|CBRS_FLYBY|CBRS_ORIENT_HORZ ) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
		return FALSE;
	}

	// Create and initialize image list used for child toolbar
	m_list1.Create( IDB_BITMAP2, 16, 1, RGB(192,192,192));

	// Create and initialize hot image list used for child toolbar
	m_list2.Create( IDB_BITMAP3, 16, 1, RGB(192,192,192));

	// Add image lists to toolbar
	m_wndToolBar.SetImageList(&m_list1, TB_SETHOTIMAGELIST );
	m_wndToolBar.SetImageList(&m_list2, TB_SETIMAGELIST );

	// Set the toolbar to draw no gripper( were using rebar gripper),
	// and style to transparent
	m_wndToolBar.DrawNoGripper();
	m_wndToolBar.ModifyStyle( 0, TBSTYLE_TRANSPARENT );

	// Add Rebar band
	m_rbbi.hwndChild	= m_wndToolBar;
	m_rbbi.cxMinChild	= 50;
	m_rbbi.cyMinChild	= 25;
	if (!InsertBand(-1, &m_rbbi))
		return FALSE;

	return TRUE;
}

BOOL CRebar::CreateAviCtrlBand()
{
	// Create animation control
	m_wndAvi.Create( WS_VISIBLE|WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,
		CRect(0,0,0,0), this, 1001 );

	// Add Rebar band
	m_rbbi.hwndChild	= m_wndAvi;
	m_rbbi.cxMinChild	= 47;
	m_rbbi.cyMinChild	= 25;
	m_rbbi.clrBack		= RGB(0,0,0);
	m_rbbi.hbmBack      = NULL;

	m_rbbi.fStyle     = RBBS_FIXEDBMP|RBBS_FIXEDSIZE;
	if (!InsertBand(-1, &m_rbbi))
		return FALSE;

	return TRUE;
}

BOOL CRebar::CreateIE4TbarBand()
{
	LPSTR lpText[] = {"Back","Forward","Stop","Refresh","Home","Search","Favorites","History","Channels","Fullscreen","Mail","Print","Edit"};

	// Create the toolbar
	if (!m_wndIE4tBar.Create( this,WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|
		CBRS_TOOLTIPS|CBRS_SIZE_DYNAMIC|CBRS_FLYBY|CBRS_ORIENT_HORZ ) ||
		!m_wndIE4tBar.LoadToolBar(IDR_IE4))
	{
		TRACE0("Failed to create toolbar\n");
		return FALSE;      // fail to create
	}

	// Create and initialize image list used for child toolbar
	CBitmap bmp1;
	bmp1.LoadBitmap( IDB_BITMAP4 );
	m_list3.Create( 21,20,ILC_COLORDDB|ILC_MASK,13,1);
	m_list3.Add( &bmp1, RGB(192,192,192) );

	// Create and initialize hot image list used for child toolbar
	CBitmap bmp2;
	bmp2.LoadBitmap( IDB_BITMAP5 );
	m_list4.Create( 21,20,ILC_COLORDDB|ILC_MASK,13,1);
	m_list4.Add( &bmp2, RGB(192,192,192) );

	// Add image lists to toolbar
	m_wndIE4tBar.SetImageList(&m_list3, TB_SETHOTIMAGELIST );
	m_wndIE4tBar.SetImageList(&m_list4, TB_SETIMAGELIST );
	
	// Set the toolbar to draw no gripper( were using rebar gripper),
	// and style to transparent and autosize
	m_wndIE4tBar.DrawNoGripper();
	m_wndIE4tBar.ModifyStyle( 0, TBSTYLE_TRANSPARENT|TBSTYLE_AUTOSIZE);

	// Set the back and forward buttons to have a drop list.
    m_wndIE4tBar.SetButtonDropDown( IDC_STATIC_BACK );
    m_wndIE4tBar.SetButtonDropDown( IDC_STATIC_FORWARD );

	// Add text to toolbar buttons.
	for( int i = IDC_STATIC_BACK, x = 0; i <= IDC_STATIC_EDIT; i++, x++ ) {
		m_wndIE4tBar.SetButtonText(
			m_wndIE4tBar.CommandToIndex( i ), lpText[x] );
	}

	// Add Rebar band
	m_rbbi.hbmBack		= m_hBmp;
	m_rbbi.hwndChild	= m_wndIE4tBar;
	m_rbbi.cxMinChild	= 50;
	m_rbbi.cyMinChild	= 40;
	m_rbbi.fStyle     = RBBS_FIXEDBMP|RBBS_BREAK;
	if (!InsertBand(-1, &m_rbbi))
		return FALSE;

	return TRUE;
}

BOOL CRebar::CreateComboBxBand()
{
	// Create combo box
	m_wndCombo.Create(WS_VISIBLE|WS_CHILD|WS_VSCROLL|CBS_DROPDOWNLIST|
		WS_CLIPCHILDREN|WS_CLIPSIBLINGS, CRect(0,0,0,0), this, 1001);

	// Band 3: Add combo box band.
	m_rbbi.hwndChild	= m_wndCombo;
	m_rbbi.cxMinChild	= 150;
	m_rbbi.cyMinChild	= 25;
	m_rbbi.fStyle     = RBBS_FIXEDBMP|RBBS_BREAK;
	m_rbbi.fMask     |= RBBIM_TEXT;
	m_rbbi.lpText     = _T("Address:");
	if (!InsertBand(-1, &m_rbbi))
		return FALSE;

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_COMMAND(IDC_STATIC_BACK, OnStatic)
	ON_COMMAND(IDC_STATIC_CHANNELS, OnStatic)
	ON_COMMAND(IDC_STATIC_EDIT, OnStatic)
	ON_COMMAND(IDC_STATIC_FAVORITES, OnStatic)
	ON_COMMAND(IDC_STATIC_FORWARD, OnStatic)
	ON_COMMAND(IDC_STATIC_FULLSCREEN, OnStatic)
	ON_COMMAND(IDC_STATIC_HISTORY, OnStatic)
	ON_COMMAND(IDC_STATIC_HOME, OnStatic)
	ON_COMMAND(IDC_STATIC_MAIL, OnStatic)
	ON_COMMAND(IDC_STATIC_PRINT, OnStatic)
	ON_COMMAND(IDC_STATIC_REFRESH, OnStatic)
	ON_COMMAND(IDC_STATIC_SEARCH, OnStatic)
	ON_COMMAND(IDC_STATIC_STOP, OnStatic)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
	
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// Create rebar control
	if (!m_wndRebar.Create(this,
		WS_CHILD|WS_VISIBLE|WS_BORDER|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|
			RBS_TOOLTIPS|RBS_BANDBORDERS|RBS_VARHEIGHT))
	{
		TRACE0("Failed to create cool bar\n");
		return -1;      // fail to create
	}

	if (!m_wndStatusBar.Create(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		  sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create status bar\n");
		return -1;      // fail to create
	}

	// Install cool menus.
	m_menuManager.Install((CFrameWnd*)this);
	m_menuManager.LoadToolbar(IDR_MAINFRAME);

	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFrameWnd::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers

// dummy command that IE4 style toolbar uses.
void CMainFrame::OnStatic()
{
}